package io.renren.modules.user.service.impl;

import io.renren.common.utils.R;

import io.renren.modules.sys.entity.SysUserRoleEntity;
import io.renren.modules.sys.service.SysUserRoleService;
import io.renren.modules.sys.service.SysUserService;
import io.renren.modules.user.dao.TPeopleChangeDao;
import io.renren.modules.user.dao.TPeopleChangeDetailsDao;
import io.renren.modules.user.dao.TPeopleOutDao;
import io.renren.modules.user.entity.*;

import io.renren.modules.user.entity.form.PeopleChangeForm;
import io.renren.modules.user.service.*;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.Query;
import org.springframework.transaction.annotation.Transactional;


@Service("tPeopleChangeService")
public class TPeopleChangeServiceImpl extends ServiceImpl<TPeopleChangeDao, TPeopleChangeEntity> implements TPeopleChangeService {

    @Autowired
    private TPeopleService tPeopleService;
    @Autowired
    private TPeopleChangeDetailsService tPeopleChangeDetailsService;
    @Autowired
    private TPeopleChangeDetailsDao tPeopleChangeDetailsDao;
    @Autowired
    private TPeopleOutService tPeopleOutService;
    @Autowired
    private SysUserRoleService sysUserRoleService;
    @Autowired
    private TPeopleNoticeService tPeopleNoticeService;
    @Autowired
    private TPeopleChangeDao tPeopleChangeDao;


    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<TPeopleChangeEntity> page = this.page(
                new Query<TPeopleChangeEntity>().getPage(params),
                new QueryWrapper<TPeopleChangeEntity>()
        );

        return new PageUtils(page);
    }

    @Override
    //@Transactional
    public R updatepeopleChange(TPeopleChangeEntity tPeopleChangeEntity) {
        //添加人员变更表
        TPeopleChangeEntity changeEntity=new TPeopleChangeEntity();
        changeEntity.setName(tPeopleChangeEntity.getName());
      //  changeEntity.setChangeType(tPeopleChangeEntity.getChangeType());
      //  changeEntity.setChangeTime(tPeopleChangeEntity.getChangeTime());
        changeEntity.setFile(tPeopleChangeEntity.getFileUrl());
        changeEntity.setChangeType(tPeopleChangeEntity.getChangeType());
        changeEntity.setChangeTime(tPeopleChangeEntity.getChangeTime());
        changeEntity.setCreateUser(tPeopleChangeEntity.getCreateUser());
        changeEntity.setStation(tPeopleChangeEntity.getStation());
        changeEntity.setCreateTime(new Date());
        this.save(changeEntity);

//        //查询要修改人员信息
       List<TPeopleEntity> tPeopleEntityList = tPeopleChangeEntity.getPeopleList();
//        if("1".equals(tPeopleChangeEntity.getChangeType())){ //单位调动
//            for(TPeopleEntity tPeopleEntity:tPeopleEntityList) {
//
//                TPeopleEntity peopleEntity = tPeopleService.getById(tPeopleEntity.getId());
//                //添加人员明细表
//                TPeopleChangeDetailsEntity changeDetailsEntity = new TPeopleChangeDetailsEntity();
//                if (tPeopleChangeEntity.getDept() != null && !"".equals(tPeopleChangeEntity.getDept())) {
//                    changeDetailsEntity.setOldDept(peopleEntity.getDept());
//                    changeDetailsEntity.setNewDept(tPeopleChangeEntity.getDept());
//                }
//                if (tPeopleChangeEntity.getZdept() != null && !"".equals(tPeopleChangeEntity.getZdept())) {
//                    changeDetailsEntity.setOldZdept(Integer.valueOf(peopleEntity.getZdept()));
//                    changeDetailsEntity.setNewZdept(Integer.valueOf(tPeopleChangeEntity.getZdept()));
//                }
//                if (tPeopleChangeEntity.getClasses() != null && !"".equals(tPeopleChangeEntity.getClasses())) {
//                    changeDetailsEntity.setOldClasses(peopleEntity.getClasses() + "");
//                    changeDetailsEntity.setNewClasses(tPeopleChangeEntity.getClasses());
//                }
//                changeDetailsEntity.setChangeId(changeEntity.getId());
//                changeDetailsEntity.setPeopleId(tPeopleEntity.getId());
//                changeDetailsEntity.setChangeType(tPeopleChangeEntity.getChangeType());
//                changeDetailsEntity.setChangeTime(tPeopleChangeEntity.getChangeTime());
//                tPeopleChangeDetailsService.save(changeDetailsEntity);
//
//                //修改人员表
//                TPeopleEntity people = new TPeopleEntity();
//                people.setId(tPeopleEntity.getId());
//                boolean zdeptFlag = false;
//                zdeptFlag = (null != tPeopleChangeEntity.getZdept() && !"".equals(tPeopleChangeEntity.getZdept()));
//                boolean deptFlag = false;
//                deptFlag = (null != tPeopleChangeEntity.getDept() && !"".equals(tPeopleChangeEntity.getDept()));
//                boolean classFlag = false;
//                classFlag = (null != tPeopleChangeEntity.getClasses() && !"".equals(tPeopleChangeEntity.getClasses()));
//                if (zdeptFlag) {
//                    people.setZdept(tPeopleChangeEntity.getZdept());
//                }
//                if (deptFlag) {
//                    people.setDept(tPeopleChangeEntity.getDept());
//                }
//                if (classFlag) {
//                    people.setClasses(Integer.parseInt(tPeopleChangeEntity.getClasses()));
//                }
//
//                tPeopleService.saveOrUpdate(people);
//
//                //获取单位变更前的管理员
//                List<SysUserRoleEntity> roleIdList = null;
//                List<SysUserRoleEntity> sysUserRoleEntities = null;
//                if (zdeptFlag) {
//                    roleIdList = sysUserRoleService.queryRoleId(null, Integer.valueOf(peopleEntity.getZdept()), null);
//                    //获取单位变更后的管理员
//                    sysUserRoleEntities = sysUserRoleService.queryRoleId(null, Integer.valueOf(tPeopleChangeEntity.getZdept()), null);
//                }
//                //获取中队变更后的管理员
//                List<SysUserRoleEntity> sysUserRoleList = null;
//                List<SysUserRoleEntity> sysRoleList = null;
//                if(deptFlag) {
//                    sysUserRoleList = sysUserRoleService.queryRoleDeptId(Integer.parseInt(tPeopleChangeEntity.getDept()), null, null);
//                    //获取中队变更前的管理员
//                    sysRoleList = sysUserRoleService.queryRoleDeptId(Integer.parseInt(peopleEntity.getDept()), null, null);
//                }
//
//                //判断支队是否发生变化
//                if(zdeptFlag&&!peopleEntity.getZdept().equals(tPeopleChangeEntity.getZdept())){
//                    for(SysUserRoleEntity sysUser:roleIdList){
//                        for (SysUserRoleEntity sysUserRoleEntity:sysUserRoleEntities) {
//                            //插入通知表，提醒相关人员
//                            TPeopleNoticeEntity tPeopleNoticeEntity=new TPeopleNoticeEntity();
//                            tPeopleNoticeEntity.setPeopleId(tPeopleEntity.getId());
//                            tPeopleNoticeEntity.setName(peopleEntity.getName());
//                            tPeopleNoticeEntity.setChanageBefore(peopleEntity.getZdept());
//                            tPeopleNoticeEntity.setChanageAfter(tPeopleChangeEntity.getZdept());
//                            tPeopleNoticeEntity.setBeforeRoleId(sysUser.getRoleId().intValue());
//                            tPeopleNoticeEntity.setAfterRoleId(sysUserRoleEntity.getRoleId().intValue());
//                            tPeopleNoticeService.save(tPeopleNoticeEntity);
//                        }
//                    }
//                }else if(deptFlag&&!peopleEntity.getDept().equals(tPeopleChangeEntity.getDept())){
//                    for(SysUserRoleEntity sysUser:sysRoleList){
//                        for (SysUserRoleEntity sysUserRoleEntity:sysUserRoleList) {
//                            //插入通知表，提醒相关人员
//                            TPeopleNoticeEntity tPeopleNoticeEntity=new TPeopleNoticeEntity();
//                            tPeopleNoticeEntity.setPeopleId(tPeopleEntity.getId());
//                            tPeopleNoticeEntity.setName(peopleEntity.getName());
//                            tPeopleNoticeEntity.setChanageBefore(peopleEntity.getDept());
//                            tPeopleNoticeEntity.setChanageAfter(tPeopleChangeEntity.getDept());
//                            tPeopleNoticeEntity.setBeforeRoleId(sysUser.getRoleId().intValue());
//                            tPeopleNoticeEntity.setAfterRoleId(sysUserRoleEntity.getRoleId().intValue());
//                            tPeopleNoticeService.save(tPeopleNoticeEntity);
//                        }
//                    }
//                }else{
//                    //插入通知表，提醒相关人员
//                    TPeopleNoticeEntity tPeopleNoticeEntity=new TPeopleNoticeEntity();
//                    tPeopleNoticeEntity.setPeopleId(tPeopleEntity.getId());
//                    tPeopleNoticeEntity.setName(peopleEntity.getName());
//                    tPeopleNoticeEntity.setChanageBefore(peopleEntity.getDept());
//                    tPeopleNoticeEntity.setChanageAfter(tPeopleChangeEntity.getDept());
//                   /* tPeopleNoticeEntity.setBeforeRoleId(sysUser.getRoleId().intValue());
//                    tPeopleNoticeEntity.setAfterRoleId(sysUserRoleEntity.getRoleId().intValue());*/
//                    tPeopleNoticeService.save(tPeopleNoticeEntity);
//                }
//
//            }
//        }
//        if("2".equals(tPeopleChangeEntity.getChangeType())){ //衔值调动
//            for(TPeopleEntity tPeopleEntity:tPeopleEntityList){
//
//                TPeopleEntity peopleEntity = tPeopleService.getById(tPeopleEntity.getId());
//                //添加人员明细表
//                TPeopleChangeDetailsEntity changeDetailsEntity=new TPeopleChangeDetailsEntity();
//                changeDetailsEntity.setOldDept(peopleEntity.getTitle()+""); //衔级
//                changeDetailsEntity.setNewDept(tPeopleChangeEntity.getTitle()+"");
//               /* changeDetailsEntity.setOldTitle(peopleEntity.getTitle());
//                changeDetailsEntity.setNewTitle(tPeopleChangeEntity.getAdministration()); //行政职务*/
//                changeDetailsEntity.setChangeId(changeEntity.getId());
//                changeDetailsEntity.setPeopleId(tPeopleEntity.getId());
//                changeDetailsEntity.setChangeType(tPeopleChangeEntity.getChangeType());
//                changeDetailsEntity.setChangeTime(tPeopleChangeEntity.getChangeTime());
//                tPeopleChangeDetailsService.save(changeDetailsEntity);
//                //修改人员表
//                TPeopleEntity people=new TPeopleEntity();
//                people.setId(tPeopleEntity.getId());
//                people.setTitle(changeDetailsEntity.getNewDept());
//                people.setTitleTime(tPeopleChangeEntity.getChangeTime());
//                tPeopleService.saveOrUpdate(people);
//
//                //获取中队变更前的管理员
//                List<SysUserRoleEntity> sysUserRoleList = sysUserRoleService.queryRoleDeptId(Integer.parseInt(peopleEntity.getDept()), null, null);
//
//                for (SysUserRoleEntity sysUserRoleEntity:sysUserRoleList) {
//                        //插入通知表，提醒相关人员
//                        TPeopleNoticeEntity tPeopleNoticeEntity=new TPeopleNoticeEntity();
//                        tPeopleNoticeEntity.setPeopleId(tPeopleEntity.getId());
//                        tPeopleNoticeEntity.setName(peopleEntity.getName());
//                        tPeopleNoticeEntity.setChanageBefore(peopleEntity.getTitle());
//                        tPeopleNoticeEntity.setChanageAfter(tPeopleChangeEntity.getTitle());
//                     //   tPeopleNoticeEntity.setBeforeRoleId(sysUserRoleEntity.getRoleId().intValue());
//                     //   tPeopleNoticeEntity.setAfterRoleId(sysUserRoleEntity.getRoleId().intValue());
//                        tPeopleNoticeEntity.setDeptId(Integer.parseInt(peopleEntity.getDept()));
//                        tPeopleNoticeService.save(tPeopleNoticeEntity);
//                    }
//
//            }
//        }
//        if("3".equals(tPeopleChangeEntity.getChangeType())){ //行政调动
//            for(TPeopleEntity tPeopleEntity:tPeopleEntityList){
//                TPeopleEntity peopleEntity = tPeopleService.getById(tPeopleEntity.getId());
//                //添加人员明细表
//                TPeopleChangeDetailsEntity changeDetailsEntity=new TPeopleChangeDetailsEntity();
//                if(peopleEntity.getAdministration()==null){
//                    changeDetailsEntity.setNewDept(tPeopleChangeEntity.getAdministration()+"");
//                }else{
//                    changeDetailsEntity.setOldDept(peopleEntity.getAdministration()+"");
//                    changeDetailsEntity.setNewDept(tPeopleChangeEntity.getAdministration()+"");
//                }
//
//                changeDetailsEntity.setChangeId(changeEntity.getId());
//                changeDetailsEntity.setPeopleId(tPeopleEntity.getId());
//                changeDetailsEntity.setChangeType(tPeopleChangeEntity.getChangeType());
//                changeDetailsEntity.setChangeTime(tPeopleChangeEntity.getChangeTime());
//                tPeopleChangeDetailsService.save(changeDetailsEntity);
//                //修改人员表
//                TPeopleEntity people=new TPeopleEntity();
//                people.setId(tPeopleEntity.getId());
//                people.setAdministration(Integer.parseInt(changeDetailsEntity.getNewDept()));
//                people.setTitleTime(tPeopleChangeEntity.getChangeTime());
//                tPeopleService.saveOrUpdate(people);
//
//               //获取中队变更前的管理员
//                List<SysUserRoleEntity> sysUserRoleList = sysUserRoleService.queryRoleDeptId(Integer.parseInt(peopleEntity.getDept()), null, null);
//                for (SysUserRoleEntity sysUserRoleEntity:sysUserRoleList) {
//                    //插入通知表，提醒相关人员
//                    TPeopleNoticeEntity tPeopleNoticeEntity=new TPeopleNoticeEntity();
//                    tPeopleNoticeEntity.setPeopleId(tPeopleEntity.getId());
//                    tPeopleNoticeEntity.setName(peopleEntity.getName());
//                    tPeopleNoticeEntity.setChanageBefore(peopleEntity.getAdministration()+"");
//                    tPeopleNoticeEntity.setChanageAfter(tPeopleChangeEntity.getAdministration()+"");
//             //       tPeopleNoticeEntity.setBeforeRoleId(sysUserRoleEntity.getRoleId().intValue());
//             //       tPeopleNoticeEntity.setAfterRoleId(sysUserRoleEntity.getRoleId().intValue());
//                    tPeopleNoticeEntity.setDeptId(Integer.parseInt(peopleEntity.getDept()));
//                    tPeopleNoticeService.save(tPeopleNoticeEntity);
//                }
//            }
//        }
        if("4".equals(tPeopleChangeEntity.getChangeType())) { //退出类型

            for (TPeopleEntity tPeopleEntity : tPeopleEntityList) {
                //
                TPeopleEntity peopleEntity = tPeopleService.getById(tPeopleEntity.getPeopleId());
//                //添加变更细表
//                TPeopleChangeDetailsEntity changeDetailsEntity=new TPeopleChangeDetailsEntity();
//                changeDetailsEntity.setChangeId(changeEntity.getId());
//                changeDetailsEntity.setPeopleId(tPeopleEntity.getId());
//                changeDetailsEntity.setChangeType(tPeopleChangeEntity.getChangeType());
//                changeDetailsEntity.setChangeTime(tPeopleChangeEntity.getChangeTime());
//                tPeopleChangeDetailsService.save(changeDetailsEntity);
                //添加人员退出
                TPeopleOutEntity tPeopleOutEntity = new TPeopleOutEntity();
                tPeopleOutEntity.setReasion(tPeopleChangeEntity.getReasion());
                tPeopleOutEntity.setState(tPeopleChangeEntity.getState());
                tPeopleOutEntity.setPeopleId(peopleEntity.getId());
                tPeopleOutEntity.setPeopleName(peopleEntity.getName());
                tPeopleOutEntity.setDeptId(Integer.parseInt(peopleEntity.getDept()));
                tPeopleOutEntity.setDeptName(tPeopleEntity.getDetachment());
                tPeopleOutEntity.setIsDisabled(tPeopleEntity.getIsDisabled());
                tPeopleOutEntity.setOutTime(tPeopleChangeEntity.getOutTime());
                tPeopleOutEntity.setOutType(tPeopleChangeEntity.getOutType());
                tPeopleOutEntity.setState("1");
                tPeopleOutService.save(tPeopleOutEntity);
                //修改人员表
                TPeopleEntity people=new TPeopleEntity();
                people.setId(Integer.parseInt(tPeopleEntity.getPeopleId()));
                people.setOutType(tPeopleChangeEntity.getOutType());
                people.setOutTime(tPeopleChangeEntity.getOutTime());
                people.setState("3");
                tPeopleService.saveOrUpdate(people);
            }
        }

        return R.ok();
    }

    @Override
    public PageUtils findPeopleChange(Map<String, Object> params) {
        IPage<TPeopleChangeDetailsEntity> page=new Query<TPeopleChangeDetailsEntity>().getPage(params);
        /*TPeopleChangeDetailsEntity tPeopleChangeDetailsEntity=new TPeopleChangeDetailsEntity();
        tPeopleChangeDetailsEntity.setLikeName((String)params.get("likeName"));*/
        List<TPeopleChangeDetailsEntity> peopleChange = tPeopleChangeDetailsDao.findPeopleChange(params);
        page.setRecords(peopleChange);
        return new PageUtils(page);
    }
    /**
     * 附件下载
     * @param changeEntity
     * @return
     */
   public List<TPeopleChangeEntity> attachmentDownload(TPeopleChangeEntity changeEntity){
        return tPeopleChangeDao.attachmentDownload(changeEntity);
    }

}